import hashlib
import os
import uuid

# 选择一个大素数p和基数g（这里为了简单起见，使用的值不足够安全）
p = 99  # 大素数，实际应用中应使用更大的素数
g = 7  # 基数

# 生成私钥（随机数），实际应用中应该使用更安全的随机数生成器
alice_private_key = int.from_bytes(os.urandom(4), byteorder='big') % (p - 1) + 1
bob_private_key = int.from_bytes(os.urandom(4), byteorder='big') % (p - 1) + 1

# 计算各自的公钥
alice_public_key = pow(g, alice_private_key, p)
bob_public_key = pow(g, bob_private_key, p)

# 双方交换公钥，并计算共享密钥
alice_shared_key = pow(bob_public_key, alice_private_key, p)
bob_shared_key = pow(alice_public_key, bob_private_key, p)

# 使用UUID和共享密钥生成最终的复杂字符串密钥
def generate_complex_key(shared_key, user_info=None):
    """基于共享密钥和用户信息（可选）生成最终的复杂字符串密钥"""
    unique_id = str(uuid.uuid4())  # 生成一个UUID
    combined_str = f"{shared_key}-{unique_id}"
    if user_info:
        combined_str += f"-{user_info}"
    hash_object = hashlib.sha256(combined_str.encode())
    return hash_object.hexdigest()















# 示例用户信息（可选）
user_info = "user123"

# 生成Alice和Bob的最终复杂字符串密钥
alice_final_key = generate_complex_key(alice_shared_key, user_info)
bob_final_key = generate_complex_key(bob_shared_key, user_info)

print(f"原始共享密钥由Alice计算得出: {alice_shared_key}")
print(f"原始共享密钥由Bob计算得出: {bob_shared_key}")

print(f"转换后的最终复杂字符串密钥由Alice得到: {alice_final_key}")
print(f"转换后的最终复杂字符串密钥由Bob得到: {bob_final_key}")

# 注意：由于UUID的引入，即使共享密钥相同，每次执行生成的最终密钥也会不同。